//////////////////////elaborado por: Susana Taquichiri////////////////////////
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Boa.AIT.AccesoDatos.Entidades;
using Boa.AIT.Negocios;
using Boa.AIT.Negocios.Servicios;
using Didsoft.Mvc.DataModel;
using Didsoft.Mvc.Controller;
using System.IO;
using Boa.AIT.Negocios.Utils;

namespace Boa.AIT.Web.Controllers
{
    public class AIT_AsignarEquipoAlmacenController : BaseController<AIT_AsignarEquipoAlmacen>
    {
	    #region interface servicios AIT_AsignarEquipoAlmacen

		private IAIT_AsignarEquipoAlmacenNegociosServicio servicio = null;
        private char SeparadorCodigosArchivo = '-';


		#endregion
		
		
		#region constructor and overridable

        public AIT_AsignarEquipoAlmacenController()
        {
		    servicio = new AIT_AsignarEquipoAlmacenNegocios();
            base.SetDataModelService(servicio);            
        }
		        

		#region overrided methods
        public override void PreCreate(dynamic ViewBag)
        {
             ViewBag.AIT_AlmacenEmpresas=new AIT_AlmacenEmpresaNegocios().ObtenerTodas();
             ViewBag.AIT_EquipoITs=new AIT_EquipoITNegocios().ObtenerTodas();
             ViewBag.AIT_SolicitudEquipos=new AIT_SolicitudEquipoNegocios().ObtenerTodas();
             ViewBag.AIT_TipoConfiguracions=new AIT_TipoConfiguracionNegocios().ObtenerTodas();

        }
        public override void PreEdit(dynamic ViewBag)
        {
             ViewBag.AIT_AlmacenEmpresas=new AIT_AlmacenEmpresaNegocios().ObtenerTodas();
             ViewBag.AIT_EquipoITs=new AIT_EquipoITNegocios().ObtenerTodas();
             ViewBag.AIT_SolicitudEquipos=new AIT_SolicitudEquipoNegocios().ObtenerTodas();
             ViewBag.AIT_TipoConfiguracions=new AIT_TipoConfiguracionNegocios().ObtenerTodas();

        }
        #endregion


		#endregion

		#region	actions

		[HttpGet]
		public override ActionResult Index()
        {
            return RedirectToAction("FilterList");
        }



        public JsonResult EquiposEnAlmacen(int almacenId)
        {
            try
            {
                List<AIT_AsignarEquipoAlmacen> accesos = servicio.ListarAsignadosAlmacen(almacenId);
                return Json(new { Result = "OK", Records = accesos });
            }
            catch (Exception ex)
            {
                return Json(new { Result = "ERROR", Message = ex.Message });
            }
        
        }


		#endregion



        #region leer archivo excel y mostrar reporte de los equipos

        public ActionResult LeerArchivo()
        {
            return View();
        }

        [HttpPost]
        public ActionResult LeerArchivo(HttpPostedFileBase archivo)
        {
            string path = string.Empty;

            if (archivo != null && archivo.ContentLength > 0)
            {
                //var fileName = Path.GetFileName(file.FileName);
                var fileName = System.Guid.NewGuid().ToString() + ".xls";
                path = Path.Combine(Server.MapPath("~/Archivos"), fileName);
                archivo.SaveAs(path);
            }
            else
            {
                ModelState.AddModelError("NoValido", "El archivo no es valido");
                return View();
            }
            

            LectorExcel lector = new LectorExcel();
            List<string> codigos = lector.ObtenerValores(path);
            


            foreach (var codigo in codigos)
            {
                try
                {
                    string[] separado = codigo.Split(SeparadorCodigosArchivo);
                    int valor = Convert.ToInt32(separado[0]);
                    if (!servicio.ObtenerTodas().Where(p => p.EquipoDisponible.Id == valor).Any())
                    {
                        ModelState.AddModelError("NoValido", "EL codigo " + codigo + " no es valido");
                        return View();
                    }

                }
                catch (Exception)
                {
                    ModelState.AddModelError("NoValido", "EL codigo " + codigo + " no es valido");
                    return View();
                }
            }
            
            return RedirectToAction("ListarEquiposEnArchivo", new { path = path });
        }


        public ActionResult ListarEquiposEnArchivo(string path)
        {
            LectorExcel lector = new LectorExcel();
            
            AIT_AsignarEquipoAlmacenNegocios equiposAlmacenNegocios = new AIT_AsignarEquipoAlmacenNegocios();
            List<string> codigos = lector.ObtenerValores(path);

            return View(equiposAlmacenNegocios.LeerDesdeArchivoExcel(SeparadorCodigosArchivo, codigos));
        }

        #endregion




    }
}

